iT邦幫忙

DAY 17
5

JavaScript 三十參系列 第 17

JavaScript 三十參(17):實字與建構式(4/7)

  • 分享至 

  • xImage
  •  

參與iT邦JavaScript中忍比賽,獲得一本JS武林祕級“JavaScript設計模式”,因而閉門修練月餘,今神功既成故節錄三十片段,以饗邦友。


先前提過,建構式只是使用new呼叫而已,但本質上還是函式。但若萬一你忘了加上new,那會發生什麼事?

其實就算忘了加"new",也不會造成語法或執行期錯誤,但會導致邏輯錯誤與非預期行為。因為當你忘了new,建構式中的this會指向全域物件,例如在瀏覽器環境中指向window。

來看個範例比較清楚。

function Waffle () {
	this.tastes = "yummy";
};

var good_morning = new Waffle();        // 有加 new
console.log(typeof good_morning);       // "object"
console.log(good_morning.tastes);       // "yummy"






function Waffle () {
	this.tastes = "yummy";
};

var good_morning = Waffle();            // 忘了加 new
console.log(typeof good_morning);       // "undefined" 
console.log(window.tastes);             // "yummy"
console.log(good_morning.tastes);       // error 

JS基本功粉重要,此節為七小段之第四段,咱先進廣告,明天回來...

(待)

JavaScript 三十參(總整理)


上一篇
JavaScript 三十參(16):實字與建構式(3/7)
下一篇
JavaScript 三十參(18):實字與建構式(5/7)
系列文
JavaScript 三十參30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 則留言

0
nestor
iT邦新手 4 級 ‧ 2012-10-25 14:49:27

沙發 太深奧了.....筆記

ted99tw iT邦高手 1 級 ‧ 2012-10-25 15:17:06 檢舉

這必需要累積百千萬劫福德,加上供養千百億那由他諸佛而無空過者才能稍有體會...驚

總裁 iT邦好手 1 級 ‧ 2012-10-25 15:42:34 檢舉

ted99tw提到:
加上供養千百億

不用那麼多,我只要一成,我就教你.....喜歡

nestor iT邦新手 4 級 ‧ 2012-10-25 20:31:59 檢舉

是辛巴威幣計價嗎?....偷笑

1
led
iT邦新手 5 級 ‧ 2012-10-25 17:30:04
<pre class="c" name="code">
function Waffle () {
	this.tastes = "yummy";
};

var good_morning = new Waffle();    // good_morning 是 Waffle 的 instance
console.log(typeof good_morning);   // "object"
console.log(good_morning.tastes);   // "yummy"



function Waffle () {
	this.tastes = "yummy";
};

var good_morning = Waffle();      // good_morning 接 Waffle 函式回傳值
console.log(typeof good_morning); // Waffle 未有回傳值 所以good_morning 未定義
console.log(window.tastes);       // 已經執行Waffle函式,this 為上一層 object即windows
console.log(good_morning.tastes); // 未定義值 沒有屬性
ted99tw iT邦高手 1 級 ‧ 2012-10-25 18:25:30 檢舉

讚讚讚
多謝補充,真是太讚了!
筆記筆記筆記

我要留言

立即登入留言